import React from 'react';


export default class FetchUtils extends React.Component {
    /*
     *  get请求
     *  url:请求地址
     *  params:参数
     *  callback:回调函数
     * */
    static get(url, params, callback) {
        if (params) {
            let paramsArray = [];
            //拼接参数
            Object.keys(params).forEach(key => paramsArray.push(key + '=' + params[key]))
            if (url.search(/\?/) === -1) {
                url += '?' + paramsArray.join('&')
            } else {
                url += '&' + paramsArray.join('&')
            }
        }
        //fetch请求
        fetch(url, {
            method: 'GET',
        })
            .then((response) => {
                return response.json()
            })
            .then((responseJSON) => {
                callback(responseJSON)
            })
            .done();
    }
    /*
     *  get请求
     *  url:请求地址
     *  header:请求头
     *  params:参数
     *  callback:回调函数
     * */
    static getWithHeader(url, header, params, callback) {
        if (params) {
            let paramsArray = [];
            //拼接参数
            Object.keys(params).forEach(key => paramsArray.push(key + '=' + params[key]))
            if (url.search(/\?/) === -1) {
                url += '?' + paramsArray.join('&')
            } else {
                url += '&' + paramsArray.join('&')
            }
        }
        //fetch请求
        fetch(url, {
            method: 'GET',
            headers: {
                'XToken': header
            },
        })
            .then((response) => {
                return response.json()
            })
            .then((responseJSON) => {
                callback(responseJSON)
            })
            .done();
    }

    /*
     *  post请求
     *  url:请求地址
     *  params:参数
     *  headers:请求头
     *  callback:回调函数
     * */
    static postWithParamHeader(url, params, headers, callback) {
        //fetch请求
        fetch(url, {
            method: 'POST',
            headers: {
                'XToken': headers,
                'Content-Type':'application/json',
            },
            body: JSON.stringify(params)
        })
            .then((response) => {
                return response.json()
            })
            .then((responseJSON) => {
                callback(responseJSON)
            }).done();
    }

    /*
     *  post请求
     *  url:请求地址
     *  header:请求头
     *  params:参数
     *  callback:回调函数
     * */
    static postWithParams(url, params, callback) {
        //fetch请求
        fetch(url, {
            method: 'POST',
            headers:{
                'Content-Type':'application/json',
            },
            body: params,
        })
            .then((response) => {
                return response.json()
            })
            .then((responseJSON) => {
                callback(responseJSON)
            }).done();
    }

    /*
         *  post请求
         *  url:请求地址
         *  formData:body
         *  callback:回调函数
         * */
    static post(url, formData, callback) {
        //fetch请求
        fetch(url, {
            method: 'POST',
            headers:{
                'Content-Type':'multipart/form-data',
            },
            body: formData,
        })
            .then((response) => {
                return response.json()
            })
            .then((responseJSON) => {
                callback(responseJSON)
            }).done();
    }
    /*
         *  post请求
         *  url:请求地址
         *  formData:body
         *  callback:回调函数
         * */
    static postFormData(url, formData, callback) {
        //fetch请求
        fetch(url, {
            method: 'POST',
            headers:{
                'Content-Type':'form-data',
            },
            body: formData,
        })
            .then((response) => {
                return response.json()
            })
            .then((responseJSON) => {
                callback(responseJSON)
            }).done();
    }
}
